EasyRSA-Readme v3.08 中文译本
Table of Contents
- 1. 译者总注
- 2. Easy-RSA 概览 ( Easy-RSA Overview )
- 3. 亮点特性 ( Feature Highlight )
- 4. 获取并使用 Easy-RSA ( Obtaining and Using Easy-RSA )
- 5. 配置 Easy-RSA ( Configuring Easy-RSA )
- 6. 起步: 基础部分 ( Getting Started: The Basics )
- 7. Easy-RSA 作为 CA 的用法 ( Using Easy-RSA as a CA )
- 8. 用 Easy-RSA 来生产密钥对和证书签发请求 ( Using Easy-RSA to generate keypairs & requests )
1. 译者总注
1.1. 关于此译本
李守中是开源软件理念坚定的支持者,所以译本虽不是软件,但依旧仿照开源软件的协议发布:
- 无担保:本文作者不保证作品内容准确无误,亦不承担任何由于使用此文档所导致的损失。
- 自由使用:任何人都可以自由地 阅读/链接/打印 此文档,无需任何附加条件。
- 名誉权:任何人都可以自由地 转载/引用/再创作 此文档,但必须保留作者署名并注明出处。
如果读者发现作品中有错误的地方,劳请来信指出。任何提高作品质量的建议李守中都将虚心接纳。
1.2. 原文档来源
下载 Easy-RSA v3.08 Release 压缩包,解压后在 doc 目录下即可获取全部项目文档。
根据 EasyRSA v3.08 EasyRSA-Readme 文档翻译而来。
1.3. 译者的话
李守中在翻译 EasyRSA v3 系列文档的过程中发现,很多句子对于程序行为的描述有些模糊。
所以,李守中将不加提示地根据软件行为意译原文档中多数的句子;对于意译困难的句子,李守中会加入以 译者注 为开始标记的文本来帮助读者理解;对于意译之后依旧无法准确描述目标行为的句子,李守中将不加提示地扩充文档的内容。
此外,李守中还发现 Easy-RSA 文档原文与程序帮助页面 ( ./easyrsa -h
) 的内容有细微出入,但二者对于程序行为的描述基本相同。考虑到使用程序帮助页面的使用次数比翻阅文档的次数更多,所以,李守中在翻译本文档时将以帮助页面的信息为准,不会完全按照文档原文进行翻译。
有能力的读者可以从此链接 easyrsa_v3.08_doc__EasyRSA_Readme.md 下载英文原文与本文做对照。
这个文档描述了 Easy-RSA 3 和与它相关特性如何工作。
如果你正在找一个不包含很多背景知识和运行细节的教学文档的话, easy-rsa/doc
目录中可能提供了基于 Easy-RSA 的用法来向读者讲解的 How-to 或 Readme 文档。 译者注: easyrsa3 并没有提供 How-to 文档,而 Readme 文档就是这个文档。老实往下读吧。
2. Easy-RSA 概览 ( Easy-RSA Overview )
Easy-RSA 是一个用于管理符合 X.509 标准的 PKI ( Public Key Infrastructure ) 的工具。PKI 由用户 ( 使用PKI的人或机构 ),认证机构 ( Certification Authority, CA) ( 颁发证书的人或机构 ),仓库 ( 保存证书的数据库,但证书通常被直接放在文件系统里 ) 组成。其中,认证机构 CA 进行这几种操作: 代用户生成密钥对 ( 当然可以由用户自己生成 ),验证注册公钥的用户的身份,生成并颁发证书,作废证书。另外,验证注册公钥的用户的身份这个操作可以由注册机构 ( Registration Authority, RA ) 来完成。使用 PKI 的其目在于创造、管理、分配、使用、存储以及撤销数字证书。 译者注: 作者对 PKI 是什么的解释有误,已修正。 关于 PKI 的更多信息可以看 EasyRSA Intro-To-PKI v3.08 中文译本 这部分。
EasyRSA 的代码可以运行在兼容 POSIX shell 的 shell 中,这样 EasyRSA 的代码可以在许多操作系统上运行。EasyRSA 的 Windows release 已经包含了运行 EasyRSA 所需的程序。EasyRSA 的代码缩减了它所依赖的外部程序的数量,所以加密相关的任务会使用 openssl 作为后端来完成。
3. 亮点特性 ( Feature Highlight )
下面是 Easy-RSA 中值得介绍的部分特性:
- Easy-RSA 可以管理多个 PKI,每个 PKI 都有自己独立的配置、独立的存储路径和独立的 X.509 证书拓展的配置。
- 支持多个 Subject Name ( 证书主体名称 ) 字段 ( X.509 DN 字段 ) 的格式。这对用于 VPN 的证书来说,可以在对证书签名的时候更清晰地配置 CommonName。
- 跨平台,全特性。BSD, Linux 等系统都可使用 Easy-RSA 的所有功能,包括 Windows。
- Easy-RSA 支持的的 X.509 标准包括 CLR ( Certificate Revocation List 被吊销证书列表 ), CDP ( CRL Distribution Point CLR 分发点 ), ( 证书扩展中的 ) keyUsage/eKu 属性与其他的属性。用户可以自定义整数的扩展。
- 支持交互式和批处理 ( batch ) 模式两种使用方法。
- 配置灵活: 可以通过命令行参数、环境变量、配置文件或同时使用这 3 中方法来配置程序如何运行。
- 对于可配置的选项,Easy-RSA 内置了默认值,不需要写其他配置即可运行程序。
4. 获取并使用 Easy-RSA ( Obtaining and Using Easy-RSA )
4.1. 下载并解压缩 ( 安装 ) ( Download and extraction ( installation ) )
Easy-RSA 程序由一个脚本文件与几个为脚本文件提供配置的文件组成。所以,只要下载 Easy-RSA Release 压缩包 ( .tar.gz 格式的压缩包是给 Linux/Unix 用的,.zip 格式的压缩包是给 Windows 用的 ) 并解压就完成了安装。不需要其他操作。
用户应该以非 root 用户来安装和运行 Easy-RSA,因为这个程序不需要 root 权限。
4.2. 运行 Easy-RSA ( Running Easy-RSA )
用户可以在自己喜欢的 shell 中调用 Easy-RSA。在 Windows 下,用户需要在命令行执行 EasyRSA-Start.bat
脚本来启动一个 POSIX-shell,然后再在这个 shell 中使用 Easy-RSA 脚本程序。
EasyRSA 命令的语法格式长这样:
./easyrsa [options] COMMAND [command-options]
COMMAND
是要运行的功能, command-options
是配置这个功能的选项。有些命令有必选项和可选项。 ./
指明了 easyrsa 脚本文件的路径,是类 Unix 系统的写法,Windows 用户请自行在 MS 的文档中找路径的写法。
下面两条命令有一样的效果,都可以查看 easyrsa 脚本运行选项的用法:
./easyrsa -h options ./easyrsa help options
下面两条命令有一样的效果,都可以查看某个功能的用法:
./easyrsa -h [COMMAND] ./easyrsa help [COMMAND]
下面三条命令有一样的效果,都可以查看 EasyRSA 有哪些功能 ( COMMAND ):
./easyrsa ./easyrsa -h ./easyrsa help
5. 配置 Easy-RSA ( Configuring Easy-RSA )
EasyRSA 3 不需要任何的配置文件就可以直接运行,而 v2 和 v1 还需要做一些配置才能运行。然而 vars.example
文件包含了许多带注释的选项,这些选项用于配置 EasyRSA 3 如何运行。阅读这个文件可以知道用户可以配置哪些东西。但是要注意,用户自定义的配置只有被写在名为 vars
文件中才能被正常读取。
译者注: 关于这个 vars 文件应该放在哪,怎么在运行的时候指定 vars 文件;有哪些环境变量可以配置;怎么自定义 X.509 标准的证书扩展。请看 EasyRSA-Advanced v3.08 中文译本 这篇。
6. 起步: 基础部分 ( Getting Started: The Basics )
这里使用的一些术语对于熟悉 PKI 如何工作的人来说很简单。如果用户不熟悉 PKI,那么读完 EasyRSA Intro-To-PKI v3.08 中文译本 之后会对 PKI 的工作流程有一个基本的概念,就可以继续往下读这篇文档了。
6.1. 创建 Easy-RSA PKI ( Creating an Easy-RSA PKI )
在所有操作之前,Easy-RSA 要先初始化一个 PKI 目录。一个 Easy-RSA 程序可以管理多个 PKI,但不同的 PKI 目录需要有不同的名称,默认的 PKI 的目录名为 pki
。
创建一个新的 PKI,重新初始化一个 PKI ( 删除旧 PKI 的数据,创建一个新的 PKI ) 都可以用下面的命令完成:
./easyrsa init-pki
在 PKI 被创建并被初始化之后,就可以用它来建立一个新的 CA 并生成密钥对了。
6.2. PKI 目录结构 ( The PKI Directory Structure )
Easy-RSA 生成的 pki 目录包含如下内容:
private/
存储了在这台机器上生成的私钥文件。reqs/
包含了生成的证书签名请求 ( certificate sign requests ) 文件。从外部导入的证书签名请求也放在这里。
在刚被初始化的 pki 目录中,以上两个子目录不包含任何内容。后续调用 Easy-RSA 脚本才会根据用户指定的操作,在这两个目录下生成必要的文件。
在构建 CA 时,Easy-RSA 和 ( 被 Easy-RSA 调用的 ) openssl 会创建许多新文件。重要的文件有:
ca.crt
CA 的证书。index.txt
是所有已颁发的证书的主数据库。serial
存储了下一个被签发的证书的序列号。( 序列号用于在主数据库中,作为已签发的证书文件的唯一标识 )private/ca.key
CA 的私钥。( 不可泄漏 )certs_by_serial/
存储了所有签发的证书,证书文件的文件名为从数据库中查到的序列号。issued
存储了所有签发的证书,证书文件的文件名为名为证书的 Subject: CommonName 字段的字符值。( 用cat
看一下证书内容就能找到这个字段,很明显 )
6.3. 在创建 PKI 之后 ( After Creating a PKI )
一旦用户创建了 pki,下一步操作就是创建一个 CA 或者生成一对密钥。下面的章节讲了这两个操作如何进行。
7. Easy-RSA 作为 CA 的用法 ( Using Easy-RSA as a CA )
7.1. 构建 CA ( Building the CA )
为了给证书签名请求文件 ( Certificate Signing Request, CSR 文件 ) 签名,用户需要一个 CA。 译者注: Easy-RSA 生成的 CSR 文件以 .req 结尾。 为了在新建的 PKI 中创建新的 CA,用户需要执行:
./easyrsa build-ca
要用一个足够复杂的密码来保护 CA 的私钥。请注意,要记住这个密码,因为后续会经常用到。比如给 CSR 文件签名的时候。
在创建 CA 的过程中,你也需要为 CA 选择一个 Common Name ( CN )。这个 CN 只是为了展示使用,用户可以选一个自己喜欢的。
7.2. 将证书签名请求文件导入到 CA 中 ( Importing requests to the CA )
在创建 CA 之后,就可以使用 PKI 从外部系统导入需要这个这个 CA 签名的 CSR 文件。为了给这个 CSR 文件签名,首先要确保这个文件被导入到 PKI 中,这样 Easy-RSA 才能知道这个文件的存在。这个 CSR 文件必须符合 PKCS 10 格式。
无论要导入的文件名是什么,Easy-RSA 都会使用导入这个 CSR 文件时定义的 短名称 来引用此请求文件。 译者注: 实际上就是,在导入 CSR 文件的时候,给这个文件指定一个新的文件名,Easy-RSA 会把要导入的 CSR 文件复制到 pki/reqs 目录下,然后用新的文件名重命名这个文件。这样 Easy-RSA 就能通过新文件名在 pki/reqs 目录下找到这个 CSR 文件。 导入的工作方式如下:
./easyrsa import-req /path/to/<file_name>.req <name_of_request>
虽然 <name_of_request>
这个字段的值可以随便写,但它的值应该让创建这个 CSR 文件的人或系统来定。 译者注: 这个字段的值最后会进入主数据库,所以还是不要随便写比较好。
7.3. 给请求文件签名 ( signing a request )
Easy-RSA 导入请求后,即可对其进行审查和签名。每个证书都需要一个"类型",它控制证书的扩展,Easy-RSA 提供了 3 种可能的类型: server
, client
和 ca
,如下所述:
client
: 作为 TLS 加密通信中的客户端,适用于 VPN 用户或 web 浏览器 ( web 客户端 )。server
: 作为 TLS 加密通信中的服务器,适用于 VPN 或 web 服务器。ca
: 一种中间 CA,用于将多个 CA 链接在一起。
./easyrsa sign-req <type> <name_of_request>
可根据需要定义其他类型的证书。更详细信息,请参阅高级文档。
7.4. 吊销证书并发布 CLRs ( Revoking and publishing CRLs )
吊销证书的操作可以用以下命令完成:
./easyrsa revoke <name_of_request>
要生成适合发布到使用它的系统的 CRL 用以下命令完成:
./easyrsa gen-crl
命令执行之后会生成 pki/crl.pem 文件,它描述了哪些证书被吊销了。必须要将该文件发布到使用证书文件的服务器中,否则证书仍然有效。
8. 用 Easy-RSA 来生产密钥对和证书签发请求 ( Using Easy-RSA to generate keypairs & requests )
Easy-RSA 可以生成 PKCS 10 格式的私钥文件与证书请求文件。CA 需要证书请求文件来生成证书。
理想情况下,用户不应该在用于 CA 的 PKI 中为客户端或服务器生成密钥对文件。最好将此过程分离,并且只在将要使用密钥对的机器上生成私钥与证书请求文件。 译者注: 因为从 CA 传输私钥文件和证书文件到目标机器要多一个文件传输的过程,而这个过程中有泄露私钥的风险。如果只在需要使用密钥的机器上生成私钥和证书请求文件,那么私钥只在存储在本机上,没有多余步骤,泄露风险小了不少。
Easy-RSA 可以用以下命令生成一对密钥:
./easyrsa gen-req <name_of_request>
然后,用户有机会修改证书请求 ( CSR ) 的 Subject 信息。Easy-RSA 默认使用命令行中提供的短名称,但如有必要,用户可以自由更改。提供密码和 Subject 信息后,将显示私钥文件和证书请求文件的路径。
为了获得已签名的证书,必须将请求 ( CSR ) 文件发送给 CA 进行签名。如果单个 PKI 不但要作为 CA,还要作为生成私钥文件和 CSR 文件的地方,则显然不需要此步骤,因为上一步生成的 CSR 就在 PKI 中 ( 已被导入 )。